#!/usr/bin/env python
# coding: utf-8

# # 上周回顾
# > 1.函数的定义
# > 2.函数名的定义规则-- >变量名一样的规则
# > 3.调用函数的方式
# > 4.参数：
# >> 1.形式参数（定义函数）
# >> 2.实际参数（调用函数）
# >> 3.有多个参数时
# >>> 1.关键字参数
# >>> 2.位置参数（调用函数时）---> 关键字参数要均放在末尾（多个不考虑顺序）
# >>> 3.默认参数（定义函数时）---> 默认参数均放在末尾（多个不考虑顺序）
# 
# 
# 
# 
# # 本周知识
# > 1.函数的返回值
# > 2.函数的参数类型
# > 3.模块和函数的关系
# > 4.定义一个模块，然后调用模块
# >> A.调用模块
# >> B.调用模块中的函数
# 

# ## 1.函数的返回值
# 
# > 1. 返回值的关键字：return
# > 2. 在其他的编程语言中，一般retur一定要写，不会报错；但在python中，return可以不写，return默认为None
# >> 1.编程语言中的函数，一定有返回值
# >> 2.返回值的结果是一个值

# In[7]:


def get_formatted_name(first_name,last_name):
    """返回整洁的名字"""
    full_name = first_name+' '+last_name
    #"函数返回结果为full_name"
    return full_name


# In[8]:


print(get_formatted_name("Li","Hua"))


# In[9]:


musician = get_formatted_name("Li","Hua")
print(musician)


# In[ ]:





# In[ ]:





# In[ ]:





# ## 2.函数的参数
# 
# ### 1.函数输入的参数
# > 1.函数可以输入复杂的参数的；
# >> 1.函数参数为列表
# >> 2.函数参数为字典
# > 2.传递任意数量的实参
# >> 1.* args
# >> 2.* kwargs

# In[ ]:





# In[10]:


def list_test(names):
    """函数输入一个列表"""
    print(names)


# In[11]:


list_test(["Lihua","Ziqi","Xiaofeng"])


# In[14]:


def dict_test(request_header):
    """函数输入一个字典"""
    print(request_header)


# In[15]:


# http://httpbin.org/get
httpbin_get = {
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", 
    "Accept-Encoding": "gzip, deflate", 
    "Accept-Language": "zh-CN,zh;q=0.9", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-61ad737f-7f5950b167a70a144d4c082b"
  }, 
  "origin": "210.21.79.236", 
  "url": "http://httpbin.org/get"
}


# In[16]:


# 调用函数时，给一个字典作为输入值
dict_test(httpbin_get["headers"])


# > 2. 传递任意数量的实参
# >> 1.args
# >>> 1.args 可以接受多个数据（单值）
# >>> 2.args 将多个数据存在一个元组当中，实际还是一个变量
# >> 2. ** kwargs
# >>> 1. kwargs 可以接受多个数据(键值对)==> 关键字参数
# >>> 2.kwargs 将多个 键值对 的数据存放在一个 字典 中，实际上还是一个变量

# In[19]:


# 回顾元组的定义
toppings = "mushroom","green peppers","extra cheese"
toppings


# In[20]:


# *args 实践：
def make_food(food,*toppings):  
    """打印顾客点的所有配料"""
    return food,toppings


# In[21]:


build_food = make_food("pizza","mushroom","green peppers","extra cheese")


# In[22]:


build_food


# In[23]:


# **kwargs 实践
def person(name,**info):
    """打印个人的信息"""
    return name,info


# In[24]:


build_person = person("Lihua",age=18,job="student",address="广州南方学院",e_mail="123456@qq.com")


# In[25]:


print(build_person)


# # 2.函数返回的结果
# >1.函数可以返回任意类型的值，包括列表、字典和集合等较为复杂的数据结构
# >> 2.函数返回一个集合
# >> 3.函数返回一个字典

# In[15]:


# 返回值为一个集合
def search4vowels(word):
    """Return a boolean based on any vowels found"""
    vowels = set('aeiou')
    found = vowels.intersection(set(word))
    return found


# In[16]:


word = search4vowels('hello Simin')
print(word)


# In[17]:


# 返回值为一个字典
def build_person(name,age,job):
    """返回一个字典，其中包含有关一个人的信息"""
    person = {'name':name,'age':age,'job':job}
    return person


# In[18]:


person = build_person("Lihua",18,"student")
print(person)


# ## 3.模块
# 
# > 1. 模块 用户都不需要看底层代码
# > 2. 调用模块的方法
# >>> 1. import mouble_name 直接调用整个模块，此时模块的所有函数处于备用状态，使用的方法为：
# mouble_name.func_name()
# >>> 2.from moudle_name import func_name,此时，仅调用模块的某一个函数，只能使用这个模块的该函数，使用方法为 func_name()

# In[26]:


import study
study.search4vowels('hello simin')


# In[27]:


from study import news_链接 #该方法不需要再写模块的名字+.func_name()


# In[ ]:




